home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / vblank1d.arc / VBLANK.LST < prev    next >
File List  |  1990-10-05  |  7KB  |  174 lines

  1. Microsoft (R) Macro Assembler Version 5.10                  10/5/90 12:26:28
  2.                                                              Page     1-1
  3.  
  4.  
  5.                         PAGE    78,132
  6.                 ; ----------                VBLANK VGA Screen Blanker
  7.                 ; ----------                       Version 1d
  8.                 ; ----------             Placed in the public domain by
  9.                 ; ----------     Richard M. Utter, ProLogic, Scottsville, New York
  10.                 ; ----------                      3 September 1990
  11.                 ; ----------
  12.                 ; ---------- Fine Print: There's no charge. Neither is there a warranty.
  13.                 ; ----------
  14.                 ; ---------- VBLANK.EXE is a TSR designed to blank a VGA monitor after a 
  15.                 ; ---------- fixed interval. Pressing any key will unblank the monitor. RAM
  16.                 ; ---------- required is about 500 bytes.
  17.                 ; ----------
  18.                 ; ---------- Assemble VBLANK.ASM with MASM 5.1. Then link VBLANK.OBJ any old
  19.                 ; ---------- way. Use Microsoft's EXEMOD or a similar utility to reduce
  20.                 ; ---------- VBLANK.EXE's memory requirement to the minimum. (For EXEMOD, the
  21.                 ; ---------- command would be "EXEMOD VBLANK.EXE /MAX 0".) Run VBLANK from the
  22.                 ; ---------- DOS command line or via AUTOEXEC.BAT. 
  23.                 ; ---------- 
  24.                 ; ---------- Timer threshold: 5000 / 18.2 = 275 seconds or thereabouts. The
  25.                 ; ---------- VGA monitor will be blanked after roughly 4.5 minutes of keyboard
  26.                 ; ---------- inactivity.
  27.  = 1388                MAXT    EQU     5000
  28.                         .MODEL  SMALL
  29.                 ; ---------- "Short stack."
  30.                         .STACK  16
  31.                         .CODE
  32.  0000                TSR     PROC    FAR
  33.  0000  EB 0A                    JMP     SHORT _1000
  34.  0002  00000000            OLD_1C  DD      0
  35.  0006  00000000            OLD_09  DD      0
  36.  000A  0000            TCOUNT  DW      0
  37.                 ; ---------- Grab old INT 1C and 9 vectors before replacing them.
  38.  000C  B8 351C            _1000:  MOV     AX,351CH
  39.  000F  CD 21                    INT     21H
  40.  0011  2E: 89 1E 0002 R                MOV     WORD PTR OLD_1C,BX
  41.  0016  2E: 8C 06 0004 R                MOV     WORD PTR OLD_1C+2,ES
  42.                 
  43.  001B  B8 3509                    MOV     AX,3509H
  44.  001E  CD 21                    INT     21H
  45.  0020  2E: 89 1E 0006 R                MOV     WORD PTR OLD_09,BX
  46.  0025  2E: 8C 06 0008 R                MOV     WORD PTR OLD_09+2,ES
  47.                 ; ---------- Point INT 8 and 9 at our interrupt routines.
  48.  002A  0E                    PUSH    CS
  49.  002B  1F                    POP     DS
  50.  002C  B8 251C                    MOV     AX,251CH
  51.  002F  BA 0044 R                MOV     DX,OFFSET INTTIME
  52.  0032  CD 21                    INT     21H
  53.                 
  54.  0034  B8 2509                    MOV     AX,2509H
  55.  0037  BA 0074 R                MOV     DX,OFFSET INTKB
  56.  003A  CD 21                    INT     21H
  57.                 ; ---------- "Terminate and stay resident", reserving 432 bytes for ourselves.
  58.                 ; ---------- 432 is a bit more than 256 + 157 + 16 (PSP plus code size plus
  59.                 ; ---------- stack size).
  60.  003C  B8 3100                    MOV     AX,3100H
  61.  003F  BA 001B                    MOV     DX,27
  62.  0042  CD 21                    INT     21H
  63.  0044                TSR     ENDP
  64.                 
  65.                 ; ---------- Timer ISR.
  66.  0044                INTTIME PROC    FAR
  67.                 ; ---------- Save DS before pointing it at local data.
  68.  0044  1E                    PUSH    DS
  69.  0045  0E                    PUSH    CS
  70.  0046  1F                    POP     DS
  71.                 ; ---------- Screen already blanked?
  72.  0047  2E: 81 3E 000A R 1388            CMP     TCOUNT,MAXT
  73.                 ; ---------- Yes. Go away.
  74.  004E  74 1E                    JE      _2000
  75.                 ; ---------- Increment and test counter.
  76.  0050  2E: 83 06 000A R 01            ADD     TCOUNT,1
  77.  0056  2E: 81 3E 000A R 1388            CMP     TCOUNT,MAXT
  78.  005D  7C 0F                    JL      _2000
  79. Microsoft (R) Macro Assembler Version 5.10                  10/5/90 12:26:28
  80.                                                              Page     1-2
  81.  
  82.  
  83.                 ; ---------- We've reached the threshold. Disable VGA screen refresh.
  84.  005F  50                    PUSH    AX
  85.  0060  52                    PUSH    DX
  86.  0061  B0 01                    MOV     AL,1
  87.  0063  BA 03C4                    MOV     DX,3C4H
  88.  0066  EE                    OUT     DX,AL
  89.  0067  42                    INC     DX
  90.  0068  EC                    IN      AL,DX
  91.  0069  0C 20                    OR      AL,20H
  92.  006B  EE                    OUT     DX,AL
  93.  006C  5A                    POP     DX
  94.  006D  58                    POP     AX
  95.                 ; ---------- Restore DS to entry value, then vector to old timer ISR.
  96.  006E  1F            _2000:  POP     DS
  97.  006F  2E: FF 2E 0002 R                JMP     OLD_1C
  98.  0074                INTTIME ENDP        
  99.                 
  100.                 ; ---------- K/B ISR.
  101.  0074                INTKB   PROC    FAR
  102.  0074  1E                    PUSH    DS
  103.  0075  0E                    PUSH    CS
  104.  0076  1F                    POP     DS
  105.                 ; ---------- Is the screen blanked? If not, unblanking it is redundant.
  106.  0077  2E: 81 3E 000A R 1388            CMP     TCOUNT,MAXT
  107.  007E  7C 0F                    JL      _3000
  108.                 ; ---------- Screen is blanked. Enable VGA screen refresh.
  109.  0080  50                    PUSH    AX
  110.  0081  52                    PUSH    DX
  111.  0082  B0 01                    MOV     AL,1
  112.  0084  BA 03C4                    MOV     DX,3C4H
  113.  0087  EE                    OUT     DX,AL
  114.  0088  42                    INC     DX
  115.  0089  EC                    IN      AL,DX
  116.  008A  24 DF                    AND     AL,NOT 20H
  117.  008C  EE                    OUT     DX,AL
  118.  008D  5A                    POP     DX
  119.  008E  58                    POP     AX
  120.                 ; ---------- Zero the counter.
  121.  008F  2E: C7 06 000A R 0000    _3000:  MOV     TCOUNT,0
  122.  0096  1F                    POP     DS
  123.                 ; ---------- Vector to the real K/B ISR.
  124.  0097  2E: FF 2E 0006 R                JMP     OLD_09
  125.  009C                INTKB   ENDP
  126.                         END     TSR
  127. Microsoft (R) Macro Assembler Version 5.10                  10/5/90 12:26:28
  128.                                                              Symbols-1
  129.  
  130.  
  131. Segments and Groups:
  132.  
  133.                 N a m e             Length     Align    Combine Class
  134.  
  135. DGROUP . . . . . . . . . . . . .      GROUP
  136.   _DATA  . . . . . . . . . . . .      0000    WORD    PUBLIC    'DATA'
  137.   STACK  . . . . . . . . . . . .      0010    PARA    STACK    'STACK'
  138. _TEXT  . . . . . . . . . . . . .      009C    WORD    PUBLIC    'CODE'
  139.  
  140. Symbols:            
  141.  
  142.                 N a m e             Type     Value     Attr
  143.  
  144. INTKB  . . . . . . . . . . . . .      F PROC    0074    _TEXT    Length = 0028
  145. INTTIME  . . . . . . . . . . . .      F PROC    0044    _TEXT    Length = 0030
  146.  
  147. MAXT . . . . . . . . . . . . . .      NUMBER    1388    
  148.  
  149. OLD_09 . . . . . . . . . . . . .      L DWORD    0006    _TEXT
  150. OLD_1C . . . . . . . . . . . . .      L DWORD    0002    _TEXT
  151.  
  152. TCOUNT . . . . . . . . . . . . .      L WORD    000A    _TEXT
  153. TSR  . . . . . . . . . . . . . .      F PROC    0000    _TEXT    Length = 0044
  154.  
  155. @CodeSize  . . . . . . . . . . .      TEXT  0        
  156. @Cpu . . . . . . . . . . . . . .      TEXT  0101h        
  157. @DataSize  . . . . . . . . . . .      TEXT  0        
  158. @FileName  . . . . . . . . . . .      TEXT  VBLANK        
  159. @Version . . . . . . . . . . . .      TEXT  510        
  160. @code  . . . . . . . . . . . . .      TEXT  _TEXT        
  161. _1000  . . . . . . . . . . . . .      L NEAR    000C    _TEXT
  162. _2000  . . . . . . . . . . . . .      L NEAR    006E    _TEXT
  163. _3000  . . . . . . . . . . . . .      L NEAR    008F    _TEXT
  164.  
  165.  
  166.     118 Source  Lines
  167.     118 Total   Lines
  168.      27 Symbols
  169.  
  170.   46762 + 411250 Bytes symbol space free
  171.  
  172.       0 Warning Errors
  173.       0 Severe  Errors
  174.